/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package conn.dao;

import conn.bean.BAbonado;
import conn.bean.BCampana;
import conn.bean.BDepartamento;
import conn.bean.BFiltroAbonado;
import conn.bean.BProvincia;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;



/**
 *
 * @author root
 */
public class DAbonado extends DBase {

    /*SI EXISTE DEVUELVE SU ID, SINO DEVUELVE -1*/
    public int existeLineaAbonado(BAbonado abonado,String numero){
        int existe=-1;

        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos
        try {

            stmt = conn.createStatement();
            res = stmt.executeQuery("SELECT a.idAbonado from abonado a,linea l WHERE l.idAbonado=a.idAbonado and l.numero='"+numero+"' and a.nombre='"+abonado.getNombre()+"' and a.apellidoPaterno='"+abonado.getApellidop()+"' and a.apellidoMaterno='"+abonado.getApellidom()+"';");

            if (res.next()) {
                existe=res.getInt(1);
            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return existe;
    }

    public int getUltimoId() {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos
        int id = 0;
        try {

            stmt = conn.createStatement();
            res = stmt.executeQuery("SELECT MAX(idAbonado) from abonado");

            if (res.next()) {

                id = res.getInt(1);
            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return id;
    }

    public void crearAbonado(BAbonado abonado) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            
                    String query =  " INSERT INTO abonado "
                    + " (nombre,apellidoPaterno,apellidoMaterno,sexo,estadoCivil,fechaNacimiento,idDireccion,livecondition)"
                    + " VALUES "
                    + " ('"+abonado.getNombre()+"','"+abonado.getApellidop()+"','"+abonado.getApellidom()+"','"+abonado.getSexo()+"','"+abonado.getEstcivil()+"','"+abonado.getFechanacimiento()+"',"+abonado.getDireccion().getIdDireccion()+",'"+abonado.getLivecondition()+"');";
                    stmt.executeUpdate(query);
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public List filtrarabonado(String varnumero, String vartplinea, String varabonom, String varaboapep, String varaboapem,
                               String vardep, String varprov, String vardist, String vardir, String varcamp) {
        List Lista = new ArrayList();
        Statement stmt = null;
        ResultSet res = null;

        BFiltroAbonado bfiltroabonado = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            String query =
                    "select l.idLinea, l.numero, tpl.nombre,a.idAbonado, a.nombre, a.apellidoPaterno, a.apellidoMaterno,  " +
                    "dep.descripcion, prov.descripcion, dist.descripcion, dir.descripcion, lxc.idCampana, c.nombre,a.livecondition " +
                    "from linea l left join lineaxcampana lxc on l.idLinea           = lxc.idLinea " +
                    "left join campana      c    on c.idCampana         = lxc.idCampana " +
                    "left join abonado      a    on l.idAbonado         = a.idAbonado " +
                    "left join tipolinea    tpl  on l.tipolinea         = tpl.idTipoLinea " +
                    "left join direccion    dir  on a.idDireccion       = dir.idDireccion " +
                    "left join distrito     dist on dir.idDistrito      = dist.idDistrito " +
                    "left join provincia    prov on dist.idProvincia    = prov.idProvincia " +
                    "left join departamento dep  on prov.idDepartamento = dep.idDepartamento " +
                    "where l.numero like '%"+varnumero+"%' and tpl.nombre like '%"+vartplinea+"%' and " +
                    "a.nombre like '%"+varabonom+"%' and a.apellidoPaterno like '%"+varaboapep+"%' and " +
                    "a.apellidoMaterno like '%"+varaboapem+"%' and dep.descripcion like '%"+vardep+"%' and " +
                    "prov.descripcion like '%"+varprov+"%' and dist.descripcion like '%"+vardist+"%' and " +
                    "dir.descripcion like '%"+vardir+"%' ";

            String query2 = "group by 4 order by 1; ";
            String query1 = "and c.nombre like '%"+varcamp+"%'";
            /*Si hay alguna campa;a detallada, utilizar el filtro de campa;a, mostrar los que esten o no incluidos en una campa;a*/
            if(!("%".equals(varcamp))){query = query + query1 + query2;} else {query = query + query2;}

            res = stmt.executeQuery(query);

            while (res.next()) {

                bfiltroabonado = new BFiltroAbonado(res.getInt(1),res.getString(2),res.getString(3),res.getInt(4),
                                                    res.getString(5),res.getString(6),res.getString(7),res.getString(8),
                                                    res.getString(9),res.getString(10),res.getString(11),res.getInt(12),res.getString(13),res.getString(14));

                Lista.add(bfiltroabonado);

            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return Lista;
    }

    public List getProvincia(String departamento) {
        List lista = new ArrayList();
        BProvincia bprovincia = null;
        BDepartamento bdepartamento = null;
        String query = null;
        Statement stmt = null;
        ResultSet res = null;
        this.init_mysql();  // se inicia la conección a la base de datos

        try {
            stmt = conn.createStatement();

            res = stmt.executeQuery("Select idProvincia, descripcion, idDepartamento from provincia where idDepartamento = '" + departamento + "';");
            while (res.next()) {
                bdepartamento = new BDepartamento(res.getInt(1),null);
                bprovincia = new BProvincia(res.getInt(1), res.getString(2), bdepartamento);
                lista.add(bprovincia);
            }

            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return lista;
    }

    public BAbonado getAbonado(int idabonado) {
        Statement stmt = null;
        ResultSet res = null;
        List Lista = new ArrayList();
        BAbonado babonado = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {
            stmt = conn.createStatement();
            res = stmt.executeQuery(
                    "select idAbonado, nombre,apellidoPaterno,apellidoMaterno,sexo,estadoCivil,fechaNacimiento,idDireccion "+
                    "from abonado where idAbonado ='"+idabonado+"'");
            if (res.next()) {

                babonado = new BAbonado(res.getInt(1), res.getString(2),res.getString(3),res.getString(4),
                               res.getString(5),res.getString(6),res.getString(7),null,null);

            }
            res.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return babonado;
    }
    public void actualizarAbonado(BAbonado babonado) {
        /*FALTA EL METODO UPDATE*/
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();


            String query = " UPDATE  abonado "
                    + " SET nombre='"+babonado.getNombre()+"',"
                    + " apellidoPaterno='"+babonado.getApellidop()+"',"
                    + " apellidoMaterno='"+babonado.getApellidom()+"',"
                    + " sexo='"+babonado.getSexo()+"',"
                    + " estadoCivil='"+babonado.getEstcivil()+"',"
                    + " fechaNacimiento='"+babonado.getFechanacimiento()+"',"
                    + " idDireccion='"+babonado.getDireccion().getIdDireccion()+"',"
                    + " livecondition='"+babonado.getLivecondition()+"'"
                    + " WHERE idAbonado='"+babonado.getIdAbonado()+"';";

            stmt.executeUpdate(query);

            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public void borrarAbonado(int id) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos

        try {

            stmt = conn.createStatement();
            stmt.executeUpdate("update abonado set livecondition='inactivo' where idAbonado = " + id );

            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
    }

    public String getLiveCondition(int idabonado) {
        Statement stmt = null;
        ResultSet res = null;

        this.init_mysql();  // se inicia la conección a la base de datos
        String strlive = null;
        try {

            stmt = conn.createStatement();
            String query  = "select livecondition from abonado where idAbonado = '"+idabonado+";";
            res = stmt.executeQuery(query);

            if (res.next()) {

                strlive = res.getString(1);
            }

            res.close();
            stmt.close();
            conn.close();

        } catch (SQLException ex) {
            System.out.println("SqlException : " + ex.toString());
        } catch (Exception ex) {
            System.out.println("Exception : " + ex.toString());
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException e) {
                    ;
                }
                res = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    ;
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    ;
                }
                conn = null;
            }
        }
        return strlive;
    }
}
